<?php 

/**
 * QNH 错误处理类
 * ============================================================================
 * * 版权所有 2005-2012 广州维赛网络科技有限公司，并保留所有权利。
 * 网站地址: http://www.weisai.net；
 * ----------------------------------------------------------------------------
 * 这不是一个自由软件！您只能在不用于商业目的的前提下对程序代码进行修改和
 * 使用；不允许对程序代码以任何形式任何目的的再发布。
 * ============================================================================
 * 按照需求，必须定义 ERROR_PATH ERROR_LOG
 * $Author: hungry $
 * $Id: error.class.php 17217 2011-01-19 06:29:08Z hungry $
 */

if (!defined('QIAQIA'))
{
	die('illegal access');
}

Class Error
{
	function __construct()
	{
		
	
	}
	function run()
	{
		if(ERROR_LOG)
		{
			register_shutdown_function(array('Error','exceptionHandler'));
		}
	}
	/**
	 * 手动记录错误函数
	 *
	 * @access  public
	 * @param   string  $msg 错误信息
	 * * @param string  $path 记录文件路径
	 * @return  void
	 */
	function log($msg,$path='')
	{
		if($path=='')
		{
			$path=ERROR_PATH;
		}
		if(@is_file($path))
		{
			$msg="---[".date('Y-m-d h:m:s',$_SERVER['REQUEST_TIME'])."] ".$msg." \r\n";
		$fp=@fopen($path,'a');
		flock($fp, LOCK_EX);
		fwrite($fp, $msg);
		flock($fp, LOCK_UN);
		fclose($fp);
		}
	}

/**
 * 自动记录错误函数
 *
 * @access  public
 * @return  void
 */
	static function exceptionHandler()
	{
		error_reporting(E_ALL ^ E_NOTICE);
		
	//	date_default_timezone_set('Etc/GMT-8');    //设置时区
		
		ini_set('display_errors',0);    //将错误记录到日志
		
		ini_set('error_log',ROOT_PATH.'/Temp/system_err.log');
		
		ini_set('log_errors',1);    //开启错误日志记录
		
		ini_set('ignore_repeated_errors',1);
		
		$user_defined_err = error_get_last();
		
		if($user_defined_err['type'] > 0)
			
			{
				
				switch($user_defined_err['type']){
					
					case 1:
						
						$user_defined_errType = '致命的运行时错误(E_ERROR)';
					
					break;
					
					case 2:
						
						$user_defined_errType = '非致命的运行时错误(E_WARNING)';
					
					break;
					
					case 4:
						
						$user_defined_errType = '编译时语法解析错误(E_PARSE)';
					
					break;
					
					case 8:
						
						$user_defined_errType = '运行时提示(E_NOTICE)';
					
					break;
					
					case 16:
						
						$user_defined_errType = 'PHP内部错误(E_CORE_ERROR)';
					
					break;
					
					case 32:
						
						$user_defined_errType = 'PHP内部警告(E_CORE_WARNING)';
					
					break;
					
					case 64:
						
						$user_defined_errType = 'Zend脚本引擎内部错误(E_COMPILE_ERROR)';
					
					break;
					
					case 128:
						
						$user_defined_errType = 'Zend脚本引擎内部警告(E_COMPILE_WARNING)';
					
					break;
					
					case 256:
						
						$user_defined_errType = '用户自定义错误(E_USER_ERROR)';
					
					break;
					
					case 512:
						
						$user_defined_errType = '用户自定义警告(E_USER_WARNING)';
					
					break;
					
					case 1024:
						
						$user_defined_errType = '用户自定义提示(E_USER_NOTICE)';
					
					break;
					
					case 2048:
						
						$user_defined_errType = '代码提示(E_STRICT)';
					
					break;
					
					case 4096:
						
						$user_defined_errType = '可以捕获的致命错误(E_RECOVERABLE_ERROR)';
					
					break;
					
					case 8191:
						
						$user_defined_errType = '所有错误警告(E_ALL)';
					
					break;
					
					default:
						
						$user_defined_errType = '未知类型';
					
					break;
					
				}
				
				$msg = sprintf('%s %s %s %s %s',date("Y-m-d H:i:s"),$user_defined_errType,$user_defined_err['message'],$user_defined_err['file'],$user_defined_err['line']);
				
				error_log($msg,0);
		
	      }
	
     }
}